Unity 4.1でも性懲りも無くXcodeから作ったプロジェクトで起動してみる
概要
モジュールのテストとかは、Xcodeで行いたい所存。
テストが完了したらプラグイン化すればいいのだし。
開発速度と繰り返しと苦楽の問題。
Unity 4.0からの変更点
結論からいうと、
・Unityの起動を任意のタイミングにすること→×
・UnityとARCライブラリとかを共存させること→○
・XcodeからOCUnitとかテストを走らせること→○
4.0で可能だった恐ろしいチートのみが不可能になった。正しい。
内容と経緯
4.0の時は、手製の設定でもって、Unity for iOS を
Xcodeで作成したプロジェクトから実行する事が出来た。
好きなときに好きなUnityプロジェクトを起動したり、
XcodeでのObjective-Cのテストなどが可能だった。
参考: UnityのiOS向けビルドを別アプリに含んで起動する
が、これが4.1から不可能になった。
UnityのアプリケーションをiOS中から起動すると、Unityの初期化処理中にエラーで落ちる。
もっとも、「穴だったから封じた」的なものではなく、
プロファイラを充実させる過程で、スレッドの数に注目するようになり、
その結果として、チェック機構のalloc過程ですでにthreadが存在する場合、mutexでエラーが起き、
Unity起動中に落ちるようになった、というのが真実っぽい。
Assertionで吹っ飛んでる節もないので、対策としていれた、と言うよりは、
取得して来たデータを変更しようとして、すでに存在してるthreadとぶつかってるような印象。
ま、なんにせよ、試験目的を果たしたプロジェクトが、アップデートで使えなくなった、
という状態に変わりなく。 それはそれでいい。正直好き放題出来すぎてた。
たぶんがんばれば突破できる。
でもがんばらない事に決めた。 テストする方法は残ってたから。
というわけで代替法
1.Xcodeで新規プロジェクトを作成 ARCありでOK
2.設定を調整(ぶっちゃけ以前の UnityのiOS向けビルドを別アプリに含んで起動する の構成がそのまま使える。)
3.Unity出力物をプロジェクトにぶち込む(-fno-objc-arc付与しまくり)
4.main.mをmain.mmに書き換え、ARC使わない設定に変更(-fno-objc-arc付与)、Unity出力物のmain.mmを模倣。
つまり、KSUnityConnectorから接続していた部分は無かった事にする
何かARCを使う部品が存在する場合、
Unity出力物の Classes/AppController.mm の startUnity 関数に書き足すと良いと思う。
調子乗りすぎるとやっぱり怒られるけど。
メリットの移り変わり
これでもまだメリットにまみれていて、
XcodeでUnityプロジェクト自体のテストが実行可能。
つまり、Jenkinsなどでの自動テストに関しては、まったくメリットが失われていない。
デメリットは、どこまでいっても「標準のやり方ではない」事。
自動テストが良いとこまで来たら、プラグイン化して、やっぱり人力でデバッグしような! ケースを作るのは人間だ!
デバッガとかそういうのは仕込みまくる前提で。
自動で出来るフェーズが存在するだけで、やり直し速度が格段にあがる。
なにより自動化できるわけですし。おすし。
すしくいてえ。